/*
 * Powered By XY
 * Since 2020
 */

package com.xy.biz.uc.dao;

import java.util.Collection;
import java.util.List;

import com.xy.biz.uc.domain.po.UserPO;
import com.xy.biz.uc.domain.query.UserQuery;

/**
 *
 *
 * @author zsp
 * @date 2020-8-19
 */
public interface UserDao {

    /**
     * 保存
     *
     * @param userPO
     */
    int saveUser(UserPO userPO);

    /**
     * 更新
     *
     * @param userPO
     */
    int updateUser(UserPO userPO);

    /**
     * 禁闭/解禁用户
     *
     * @param userPO
     */
    int lockUser(UserPO userPO);

    /**
     * 删除
     *
     * @param userId
     */
    int deleteUser(Long userId);

    /**
     * 判断用户名是否已存在
     *
     * @param userCode
     * @return
     */
    boolean isUserCodeExists(String userCode);

    /**
     * 判断手机是否已存在
     *
     * @param mobile
     * @return
     */
    boolean isMobileExists(String mobile);

    /**
     * 判断邮件是否已存在
     *
     * @param email
     * @return
     */
    boolean isEmailExists(String email);

    /**
     * 查找一个
     *
     * @param userId
     * @return
     */
    UserPO getUser(Long userId);

    /**
     * 查找一个
     *
     * @param userCode
     * @return
     */
    UserPO getUserByUserCode(String userCode);

    /**
     * 查找一个
     *
     * @param userName
     * @return
     */
    UserPO getUserByName(String userName);

    /**
     * 查找一个
     *
     * @param collection
     * @return
     */
    List<UserPO> getUserByNameS(Collection<String> collection);

    /**
     * 查找多条
     *
     * @param collection
     * @return
     */
    List<UserPO> listUserById(Collection<Long> collection);

    /**
     * 条件查找多条
     *
     * @param query 查找条件
     * @return
     */
    List<UserPO> listUser(UserQuery query);

    /**
     * 条件统计个数
     *
     * @param query 查找条件
     * @return
     */
    int countUser(UserQuery query);

    /**
     * 根据userCode(用户名)模糊搜索用户
     * @param userQuery
     */
    List<UserPO> searchUser(UserQuery userQuery);

    /**
     * 按userName模糊查询统计个数
     *
     * @param query 查找条件
     * @return
     */
    int countSearchUser(UserQuery query);
}
